<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of persisteciaTrabajo
 *
 * @author Agustin
 */
require_once 'conexion.php';
require_once 'trabajos.php';
require_once 'persistenciaOrden.php';

class PersistenciaTrabajo {

    private static $instance = false;

    public static function getInstance() {
        if (!self::$instance instanceof self) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    private function __construct() {
        
    }

    public function crearTrabajo($datos) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "INSERT INTO trabajos (fechaInicio,porcentaje,tiempoParcial,idOrden,pocicion) VALUES('" . $datos[0] . "','" . $datos[1] . "','" . $datos[2] . "','" . $datos[3] . "'," . $datos[4] . ")";
            $db->consulta($sentencia);
            return true;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerTrabajos($dato) {
        $db = Conexion::getInstance();
        $pO = PersistenciaOrden::getInstance();
        $trabajos = array();
        $consulta = $db->consulta('select fechaInicio, porcentaje, tiempoParcial, idOrden, pocicion from trabajos where porcentaje < 100 and fechaInicio >= ' . "'" . $dato . "'" . ' order by fechaInicio,pocicion');
        foreach ($consulta as $trabajo) {
            $trab = new Trabajo(null);
            $trab->fechaInicio = $trabajo[0];
            $trab->porcentaje = $trabajo[1];
            $trab->tiempoParcial = $trabajo[2];
            $trab->orden = $pO->traerOrdenes($trabajo[3]);
            $trab->posicion = $trabajo[4];
            array_push($trabajos, $trab);
        }
        return $trabajos;
    }

    public function traerTrabajo($dato) {
        if ($dato != 'N') {
            try {
                $db = Conexion::getInstance();
                $pO = PersistenciaOrden::getInstance();
                if ($dato == '') {
                    $trabajos = array();
                    $consulta = $db->consulta('select fechaInicio, porcentaje, tiempoParcial, idOrden, pocicion from trabajos where porcentaje < 100  order by fechaInicio,pocicion');
                    foreach ($consulta as $trabajo) {
                        $trab = new Trabajo(null);
                        $trab->fechaInicio = $trabajo[0];
                        $trab->porcentaje = $trabajo[1];
                        $trab->tiempoParcial = $trabajo[2];
                        $trab->orden = $pO->traerOrdenes($trabajo[3]);
                        $trab->posicion = $trabajo[4];
                        array_push($trabajos, $trab);
                    }
                    return $trabajos;
                } else {
                    $trabajos = array();
                    $sql = 'select DATE_FORMAT(fechaInicio, "%d/%m/%Y"), porcentaje, tiempoParcial, idOrden, pocicion from trabajos where idOrden = ' . $dato . ' and porcentaje < 100 order by fechaInicio, pocicion';
                    $consulta = $db->consulta($sql);
                    if (count($consulta) > 0) {
                        $trabajo = $consulta[0];
                        $trab = new Trabajo(null);
                        $trab->fechaInicio = $trabajo[0];
                        $trab->porcentaje = $trabajo[1];
                        $trab->tiempoParcial = $trabajo[2];
                        $trab->orden = $pO->traerOrdenes($trabajo[3]);
                        $trab->posicion = $trabajo[4];
                    } else {
                        $trab = new Trabajo(null);
                    }
                    return $trab;
                }
            } catch (Exception $exc) {
                echo $exc->getTraceAsString();
            }
        }
    }

    public function cambiarPociciones($idOrden, $fecha) {

        $db = Conexion::getInstance();
        $sentencia = 'select fechaInicio, porcentaje, tiempoParcial, idOrden, pocicion from trabajos where porcentaje < 100 and fechaInicio = ' . "'" . $fecha . "'" . '  order by fechaInicio,pocicion';
        $arr = $db->consulta($sentencia);
        $i = 0;
        $modificar = false;

        foreach ($arr as $trabajo) {
            if ($modificar) {
//                echo '111111';
//                echo '<br></br>';
                $sentencia = 'update trabajos set pocicion = ' . $i . ' where idOrden = ' . $trabajo['idOrden'];
                $db->consulta($sentencia);
//                echo $sentencia;
//                echo '<br></br>';
            }
//            echo $trabajo['idOrden'];
//            echo '<br></br>';
            if ($trabajo['idOrden'] != $idOrden) {
                $i++;
            } else {
                $modificar = true;
            }
        }
    }

    public function actualizarTrabajo($datos) {
        try {
            $db = Conexion::getInstance();
            $fechaVieja = $db->consulta('select fechaInicio from trabajos where idOrden = ' . $datos[0]);
            if ($datos[4] != $fechaVieja[0]) {
                $this->cambiarPociciones($datos[0], $datos[4]);
                $po = PersistenciaOrden::getInstance();
                $orden = $po->traerOrdenes($datos[0]);
                $sentencia = 'delete from trabajos where idOrden = ' . $datos[0];
                $db->consulta($sentencia);
                $po->agregarTrabajos($datos[4], $orden[0]->reclamo[0]->id, $orden[0]->numero);
            }
            if ($datos[1] == 100) {
                $this->cambiarPociciones($datos[0], $datos[4]);
                $sentencia = "UPDATE trabajos set porcentaje = " . $datos[1] . ", tiempoParcial = " . $datos[2] . ", fechaInicio = '" . $datos[4] . "' where idOrden = " . $datos[0];
                $db->consulta($sentencia);
            } else {
                $sentencia = "UPDATE trabajos set porcentaje = " . $datos[1] . ", tiempoParcial = " . $datos[2] . ", fechaInicio = '" . $datos[4] . "' where idOrden = " . $datos[0];
                $db->consulta($sentencia);
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function guardarCambiosFechaPosicion($arr, $fecha) {
        foreach ($arr as $dia) {
            $i = 0;
            foreach ($dia as $trabajo) {
//                echo $i;
//                echo '   '.$fecha.'        ';
//                echo $trabajo.'        ';
                $sentencia = "UPDATE trabajos set pocicion = " . $i . ", fechaInicio = " . "'" . $fecha . "'" . " where idOrden = " . $trabajo;
//                echo $sentencia;
                $db = Conexion::getInstance();
                $db->consulta($sentencia);
                $i++;
            }
            list($year, $mon, $day) = explode('-', $fecha);
            $fecha = date('Y-m-d', mktime(0, 0, 0, $mon, $day + 1, $year));
        }
    }

    public function reorganizar() {
        require_once 'Controlador/controladoraOrden.php';
        require_once 'orden.php';
        require_once 'reclamo.php';
        echo date("Y/m/d");
        $db = Conexion::getInstance();
        $reorganizar = $db->consulta('select fechaInicio from trabajos where porcentaje < 100  order by fechaInicio limit 1');
        list( $year, $mon, $day) = explode('/', date("Y/m/d"));
        $fecha = date('Y-m-d', mktime(0, 0, 0, $mon, $day, $year));

        list( $year, $mon, $day) = explode('/', date("Y/m/d"));
        $fechaOld = date('Y-m-d', mktime(0, 0, 0, $mon, $day - 1, $year));
        if ($reorganizar != null) {
            if ($reorganizar[0] != $fecha) {
                $arrOld = $this->traerTrabajo('');
                $db->consulta('delete from trabajos where porcentaje <> 100');
                $po = PersistenciaOrden::getInstance();
                foreach ($arrOld as $trabajo) {
                    $orden = $trabajo->orden;
                    if ($fechaOld >= $trabajo->fechaInicio) {
                        $po->agregarTrabajos($fecha, $orden[0]->reclamo[0]->id, $orden[0]->numero);
                    } else {
                        $po->agregarTrabajos($trabajo->fechaInicio, $orden[0]->reclamo[0]->id, $orden[0]->numero);
                    }
                }
            }
        }
    }

}

?>
